package br.fafica.poo2.rightcode.instituicao;

import java.sql.SQLException;
import java.util.ArrayList;



import br.fafica.poo2.rightcode.exception.CnpjInvalidoException;
import br.fafica.poo2.rightcode.exception.InstituicaoNaoEncontradaException;
import br.fafica.poo2.rightcode.exception.ListaInstituicaoVaziaException;
import br.fafica.poo2.rightcode.exception.NomeInvalidoException;
import br.fafica.poo2.rightcode.factory.DataSourceFactory;
import br.fafica.poo2.rightcode.factory.DataSourceType;
import br.fafica.poo2.rightcode.factory.IFactory;

public class ControladorInstituicao {
	private DataSourceFactory dataSourceFactory;
	private IFactory dataSource;

	
		public ControladorInstituicao(){
			this.dataSourceFactory= new DataSourceFactory();
			this.dataSourceFactory.setType(DataSourceType.ARRAYLIST); 
			this.dataSource=this.dataSourceFactory.getDataSource();
		}
		public void selectDataSourceInstituicao(DataSourceType type){
			dataSourceFactory.setType(type);
			dataSource = dataSourceFactory.getDataSource();
		}
		public void TesteInstituicao() throws SQLException {
			this.dataSource.getRepositorioInstituicao().TesteInstituicao();
			
		}

		public void InstalarInstituicao(boolean samples) throws SQLException {
			this.dataSource.getRepositorioInstituicao().InstalarInstituicao(samples);
			
		}

		public void AdicionarInstituicao(Instituicao instituicao) throws SQLException, NomeInvalidoException,CnpjInvalidoException {
			if(instituicao.getCnpj()<0){
				throw new CnpjInvalidoException();
			}if(instituicao.getNome()==null){
				throw new NomeInvalidoException();
			}else{
				this.dataSource.getRepositorioInstituicao().AdicionarInstituicao(instituicao);
			}
			
			
		}

		public ArrayList<Instituicao> ListaInstituicao() throws SQLException,
				ListaInstituicaoVaziaException {
			return this.dataSource.getRepositorioInstituicao().ListaInstituicao();
		}

		public void RemoverInstituicao(Instituicao instituicao) throws SQLException,
				InstituicaoNaoEncontradaException, CnpjInvalidoException {
			if(instituicao.getCnpj()<0){
				throw new CnpjInvalidoException();
			}else{
				this.dataSource.getRepositorioInstituicao().RemoverInstituicao(instituicao);
			}
			
			
		}

		public Instituicao BuscarInstituicao(int cnpj) throws SQLException,
				InstituicaoNaoEncontradaException, CnpjInvalidoException {
			if(cnpj<0){
				throw new CnpjInvalidoException();
			}else{
				return this.dataSource.getRepositorioInstituicao().BuscarInstituicao(cnpj);
			}
		}

		public void EditarInstituicao(Instituicao instituicao)
				throws InstituicaoNaoEncontradaException, SQLException, NomeInvalidoException, CnpjInvalidoException {
			if(instituicao.getCnpj()<0){
				throw new CnpjInvalidoException();
			}if(instituicao.getNome()==null){
				throw new NomeInvalidoException();
			}else{
				this.dataSource.getRepositorioInstituicao().EditarInstituicao(instituicao);
			}
			
		}

	}


		

